package 变量和数据类型;
/*
    创建一个子类时(继承关系),它们的静态代码块，静态属性初始化，
    普通代码块，普通属性，构造方法的调用顺序：
        1.父类的静态代码块和静态属性(优先级一样，按定义顺序执行)
        2.子类的静态代码块和静态属性(优先级一样，按定义顺序执行)
        3.父类的普通代码块和普通属性(优先级一样，按定义顺序执行)
        4.父类的构造方法
        5.子类的普通代码块和普通属性(优先级一样，按定义顺序执行)
        6.子类的构造方法
 */
public class 静态代码块3 {
    public static void main(String[] args) {
        B02 b02 = new B02();

    }
}

class A02{
    //静态属性
    private static int n1 = getVal01();

    //静态代码块
    static {
        System.out.println("A02的一个静态代码块");
    }

    //普通代码块
    {
        System.out.println("A02的一个普通代码块");
    }

    //普通属性
    public int n2 = getVal02();

    //普通方法
    private int getVal02() {
        System.out.println("A02的普通方法");
        return 20;
    }

    public A02() {
        System.out.println("A02的构造器");
    }

    //静态方法
    private static int getVal01() {
        System.out.println("A02的静态方法");
        return 10;
    }
}

class B02 extends A02{
    private static int n3 = getVal03();

   static {
       System.out.println("B02的一个静态代码块");
   }
    {
        System.out.println("B02的普通代码块");
    }

    public int n2 = getVal04();

    private int getVal04() {
        System.out.println("B02的普通方法");
        return 0;
    }

    private static int getVal03() {
        System.out.println("B02的静态方法");
        return 10;
    }

    public B02() {
        System.out.println("B02的构造器");
    }
}

